package xin.leetcode;

/**
 * <pre>
 * leetcode 1004
 * 给定一个由若干 0 和 1 组成的数组 A，我们最多可以将 K 个值从 0 变成 1 。
 *
 * 返回仅包含 1 的最长（连续）子数组的长度。
 *
 *
 * 示例 1：
 *
 * 输入：A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
 * 输出：6
 * 解释：
 * [1,1,1,0,0,1,1,1,1,1,1]
 * 粗体数字从 0 翻转到 1，最长的子数组长度为 6。
 * 示例 2：
 *
 * 输入：A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
 * 输出：10
 * 解释：
 * [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
 * 粗体数字从 0 翻转到 1，最长的子数组长度为 10。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/max-consecutive-ones-iii
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * </pre>
 *
 * @author lixin_ma@outlook.com
 * @since 2021/2/19
 */
public class Practice1004 {
	
	public static void main(String[] args) {
		Practice1004 practice = new Practice1004();
		int[] A = {1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0};
		System.out.println(practice.longestOnes(A, 2));
	}
	
	/**
	 * @param A 数组A
	 * @param K 变量K，翻转个数
	 * @return 连续长度
	 */
	public int longestOnes(int[] A, int K) {
		int border = A.length;
		int res = 0;
		int left = 0, right = 0;
		int counter = 0;
		while (right < border) {
			if (A[right] == 0)
				counter++;
			while (counter > K) {
				if (A[left++] == 0)
					counter--;
			}
			res = Math.max(res, right - left + 1);
			right++;
		}
		return res;
	}
}
